---
title: "Environment Variables"
description: ""
---

<Note>If you selfhost, please make sure to create your own oAuth app and [report the credentials in the dashboard](/recipes/add-custom-provider-creds) or directly fill these env vars in your .env [here](/open-source/self_hosting/envVariables#providers-specific-credentials)! </Note>

# Backend

## Secrets

| Variable | Example                           | Purpose                           |
| -------- | ------------------------------------- | ------------------------------------- |
| JWT_SECRET      | secret_jwt  | Jwt token used to authenticate requests coming from the webapp to the server |
| ENCRYPT_CRYPTO_SECRET_KEY   | 0123456789abcdef0123456789abcdef | 256-Bit Encryption key used to encrypt sensitive data | 

## Configuration

| Variable | Example                           | Purpose                           |
| -------- | ------------------------------------- | ------------------------------------- |
| ENV     | dev | Values are dev, prod or sandbox  |
| DISTRIBUTION      | selfhost  | Values are selfhost or managed |
| PANORA_BASE_API_URL   | http://localhost:3000 | | 
| REDIS_HOST     | redis  | The redis host  |
| REDIS_PASS      | A3vniod98Zbuvn9u5  | The redis password |
| REDIS_PORT   | 6379 |The redis port| 
| EMAIL_SENDING_ADDRESS      |    |   |
| SMTP_HOST      |    |   |
| SMTP_PORT      |    |   |
| SMTP_USER      |    |   |
| SMTP_PASSWORD      |    |   |

## Errors & Analytics (Optional in Selfhost)

| Variable | Example                           | Purpose                           |
| -------- | ------------------------------------- | ------------------------------------- |
| SENTRY_DSN     | | Sentry Dsn |
| SENTRY_ENABLED      |  | Flag which indicates if you want to enable Sentry  |
| POSTHOG_HOST      |    |   |
| POSTHOG_KEY      |    |   |
| PH_TELEMETRY      |    |   |

## Database

| Variable | Example                           | Purpose                           |
| -------- | ------------------------------------- | ------------------------------------- |
| POSTGRES_USER     | my_user  |  username to get access access to the db |
| POSTGRES_DB      | panora_db   | database name to get access access to the db |
| POSTGRES_HOST      | postgres   | host to get access access to the db |
| POSTGRES_PASSWORD     | my_password | password to get access access to the db |


## Ingress

<Note>Check [here](/self_hosting/ngrok) to set up Ngrok ! </Note>

| Variable | Example                           | Purpose                           |
| -------- | ------------------------------------- | ------------------------------------- |
| REDIRECT_TUNNEL_INGRESS     | https://MY-NGROK-DOMAIN.ngrok-free.app  | Mandatory only when DISTRIBUTION=selfhost. Endpoint (an Ngrok tunnel domain) when you have to test your OAuth App and needs a HTTPS redirectUri that redirects to your localhost (useful for contributors that might need to test their oAuth flow)  |
| WEBHOOK_INGRESS      |  https://MY-NGROK-DOMAIN.ngrok-free.app  | If you plan to use the Backend SDK to receive data, if your receiving server is running locally you must use a Ngrok redirect as well. (our main API is runnning within docker and doesnt have localhost context so requests must be https). Alternatively, you can just input it [using the dashboard](/webhooks/overview#:~:text=Register%20your%20endpoint%20within%20Panora%20using%20the%20Dashboard%20or%20the%20API.).   |


## Providers Specific Credentials

<Info>
      You must manually create a custom OAuth2 App inside the 3rd party and copy the
      critical values (likely _client id and client secret_)
    </Info>
    You have the option to manage a custom 3rd party OAuth App.

    **Each custom 3rd party environment variable must be of the form `PROVIDER_category_SOFTWAREMODE_ATTRIBUTE` where**

    - `PROVIDER` is any 3rd party name
    - `category` is for example [CRM, TICKETING, MARKETINGAUTOMATION, ...]
    - `SOFTWAREMODE` is [ CLOUD, ONPREMISE ]
    - `ATTRIBUTE` is for example [ CLIENT_ID, CLIENT_SECRET, SUBDOMAIN, ... ]

    _Example_ :

    - `HUBSPOT_CRM_CLOUD_CLIENT_ID = client_id_value_pasted_from_hubspot_developer_app`
    - `HUBSPOT_CRM_CLOUD_CLIENT_SECRET = client_secret_value_pasted_from_hubspot_developer_app`

| Variable | Example                           | Purpose                           |
| -------- | ------------------------------------- | ------------------------------------- |
| HUBSPOT_CRM_CLOUD_CLIENT_ID     |   |   |
| HUBSPOT_CRM_CLOUD_CLIENT_SECRET      |    |   |
| ZOHO_CRM_CLOUD_CLIENT_ID      |    |   |
| ZOHO_CRM_CLOUD_CLIENT_SECRET      |    |   |
| PIPEDRIVE_CRM_CLOUD_CLIENT_ID      |    |   |
| PIPEDRIVE_CRM_CLOUD_CLIENT_SECRET      |    |   |
| ZENDESK_CRM_CLOUD_CLIENT_ID      |    |   |
| ZENDESK_CRM_CLOUD_CLIENT_SECRET      |    |   |
| ATTIO_CRM_CLOUD_CLIENT_ID      |    |   |
| ATTIO_CRM_CLOUD_CLIENT_SECRET      |    |   |
| CLOSE_CRM_CLOUD_CLIENT_ID      |    |   |
| CLOSE_CRM_CLOUD_CLIENT_SECRET      |    |   |
| CAPSULE_CRM_CLOUD_CLIENT_ID     |    |   |
| CAPSULE_CRM_CLOUD_CLIENT_SECRET     |    |   |
| TEAMLEADER_CRM_CLOUD_CLIENT_ID      |    |   |
| TEAMLEADER_CRM_CLOUD_CLIENT_SECRET      |    |   |
| ZENDESK_TICKETING_CLOUD_CLIENT_ID      |    |   |
| ZENDESK_TICKETING_CLOUD_CLIENT_SECRET      |    |   |
| ZENDESK_TICKETING_CLOUD_SUBDOMAIN      |    |   |
| JIRA_TICKETING_CLOUD_CLIENT_ID      |    |   |
| JIRA_TICKETING_CLOUD_CLIENT_SECRET      |    |   |
| FRONT_TICKETING_CLOUD_CLIENT_ID      |    |   |
| FRONT_TICKETING_CLOUD_CLIENT_SECRET      |    |   |
| GORGIAS_TICKETING_CLOUD_CLIENT_ID      |    |   |
| GORGIAS_TICKETING_CLOUD_CLIENT_SECRET      |    |   |
| LINEAR_TICKETING_CLOUD_CLIENT_ID      |    |   |
| LINEAR_TICKETING_CLOUD_CLIENT_SECRET      |    |   |
| CLICKUP_TICKETING_CLOUD_CLIENT_ID      |    |   |
| CLICKUP_TICKETING_CLOUD_CLIENT_SECRET      |    |   |
| ASANA_TICKETING_CLOUD_CLIENT_ID      |    |   |
| ASANA_TICKETING_CLOUD_CLIENT_SECRET      |    |   |
| AHA_TICKETING_CLOUD_CLIENT_ID      |    |   |
| AHA_TICKETING_CLOUD_CLIENT_SECRET      |    |   |
| AHA_TICKETING_CLOUD_SUBDOMAIN      |    |   |
| HELPSCOUT_TICKETING_CLOUD_CLIENT_ID      |    |   |
| HELPSCOUT_TICKETING_CLOUD_CLIENT_SECRET      |    |   |
| IRONCLAD_TICKETING_CLOUD_CLIENT_ID      |    |   |
| IRONCLAD_TICKETING_CLOUD_CLIENT_SECRET      |    |   |
| GITHUB_TICKETING_CLOUD_CLIENT_ID      |    |   |
| GITHUB_TICKETING_CLOUD_CLIENT_SECRET      |    |   |
| WRIKE_TICKETING_CLOUD_CLIENT_ID      |    |   |
| WRIKE_TICKETING_CLOUD_CLIENT_SECRET      |    |   |
| GITLAB_TICKETING_CLOUD_CLIENT_ID      |    |   |
| GITLAB_TICKETING_CLOUD_CLIENT_SECRET      |    |   |
| SAGE_ACCOUNTING_CLOUD_CLIENT_ID      |    |   |
| SAGE_ACCOUNTING_CLOUD_CLIENT_SECRET      |    |   |
| PENNYLANE_ACCOUNTING_CLOUD_CLIENT_ID      |    |   |
| PENNYLANE_ACCOUNTING_CLOUD_CLIENT_SECRET      |    |   |
| FREEAGENT_ACCOUNTING_CLOUD_CLIENT_ID      |    |   |
| FREEAGENT_ACCOUNTING_CLOUD_CLIENT_SECRET      |    |   |
| FRESHBOOKS_ACCOUNTING_CLOUD_CLIENT_ID      |    |   |
| FRESHBOOKS_ACCOUNTING_CLOUD_CLIENT_SECRET      |    |   |
| MONEYBIRD_ACCOUNTING_CLOUD_CLIENT_ID      |    |   |
| MONEYBIRD_ACCOUNTING_CLOUD_CLIENT_SECRET      |    |   |
| QUICKBOOKS_ACCOUNTING_CLOUD_CLIENT_ID      |    |   |
| QUICKBOOKS_ACCOUNTING_CLOUD_CLIENT_SECRET      |    |   |
| XERO_ACCOUNTING_CLOUD_CLIENT_ID      |    |   |
| XERO_ACCOUNTING_CLOUD_CLIENT_SECRET      |    |   |
| DEEL_HRIS_CLOUD_CLIENT_ID      |    |   |
| DEEL_HRIS_CLOUD_CLIENT_SECRET      |    |   |
| RIPPLING_HRIS_CLOUD_CLIENT_ID      |    |   |
| RIPPLING_HRIS_CLOUD_CLIENT_SECRET      |    |   |
| GUSTO_HRIS_CLOUD_CLIENT_ID      |    |   |
| GUSTO_HRIS_CLOUD_CLIENT_SECRET      |    |   |
| FACTORIAL_HRIS_CLOUD_CLIENT_ID      |    |   |
| FACTORIAL_HRIS_CLOUD_CLIENT_SECRET      |    |   |
| NAMELY_HRIS_CLOUD_CLIENT_ID      |    |   |
| NAMELY_HRIS_CLOUD_CLIENT_SECRET      |    |   |
| NAMELY_HRIS_CLOUD_SUBDOMAIN      |    |   |
| GOOGLEDRIVE_FILESTORAGE_CLOUD_CLIENT_ID      |    |   |
| GOOGLEDRIVE_FILESTORAGE_CLOUD_CLIENT_SECRET      |    |   |
| ONEDRIVE_FILESTORAGE_CLOUD_CLIENT_ID      |    |   |
| ONEDRIVE_FILESTORAGE_CLOUD_CLIENT_SECRET      |    |   |
| SHAREPOINT_FILESTORAGE_CLOUD_CLIENT_ID      |    |   |
| SHAREPOINT_FILESTORAGE_CLOUD_CLIENT_SECRET      |    |   |
| DROPBOX_FILESTORAGE_CLOUD_CLIENT_ID      |    |   |
| DROPBOX_FILESTORAGE_CLOUD_CLIENT_SECRET      |    |   |
| BOX_FILESTORAGE_CLOUD_CLIENT_ID      |    |   |
| BOX_FILESTORAGE_CLOUD_CLIENT_SECRET      |    |   |
| KEAP_MARKETINGAUTOMATION_CLOUD_CLIENT_ID      |    |   |
| KEAP_MARKETINGAUTOMATION_CLOUD_CLIENT_SECRET      |    |   |
| MAILCHIMP_MARKETINGAUTOMATION_CLOUD_CLIENT_ID      |    |   |
| MAILCHIMP_MARKETINGAUTOMATION_CLOUD_CLIENT_SECRET      |    |   |
| KLAVIYO_TICKETING_CLOUD_CLIENT_ID      |    |   |
| KLAVIYO_TICKETING_CLOUD_CLIENT_SECRET      |    |   |
| NOTION_PRODUCTIVITY_CLOUD_CLIENT_ID      |    |   |
| NOTION_PRODUCTIVITY_CLOUD_CLIENT_SECRET      |    |   |
| SLACK_PRODUCTIVITY_CLOUD_CLIENT_ID      |    |   |
| SLACK_PRODUCTIVITY_CLOUD_CLIENT_SECRET      |    |   |
| GREENHOUSE_ATS_CLOUD_CLIENT_ID      |    |   |
| GREENHOUSE_ATS_CLOUD_CLIENT_SECRET      |    |   |
| JOBADDER_ATS_CLOUD_CLIENT_ID      |    |   |
| JOBADDER_ATS_CLOUD_CLIENT_SECRET      |    |   |
| LEVER_ATS_CLOUD_CLIENT_ID      |    |   |
| LEVER_ATS_CLOUD_CLIENT_SECRET      |    |   |
| SHOPIFY_ECOMMERCE_CLOUD_CLIENT_ID      |    |   |
| SHOPIFY_ECOMMERCE_CLOUD_CLIENT_SECRET      |    |   |
| SHOPIFY_ECOMMERCE_CLOUD_SUBDOMAIN      |    |   |
| SQUARESPACE_ECOMMERCE_CLOUD_CLIENT_ID      |    |   |
| SQUARESPACE_ECOMMERCE_CLOUD_CLIENT_SECRET      |    |   |
| EBAY_ECOMMERCE_CLOUD_CLIENT_ID      |    |   |
| EBAY_ECOMMERCE_CLOUD_CLIENT_SECRET      |    |   |
| EBAY_ECOMMERCE_CLOUD_RUVALUE      |    |   |
| FAIRE_ECOMMERCE_CLOUD_CLIENT_ID      |    |   |
| FAIRE_ECOMMERCE_CLOUD_CLIENT_SECRET      |    |   |
| WEBFLOW_ECOMMERCE_CLOUD_CLIENT_ID      |    |   |
| WEBFLOW_ECOMMERCE_CLOUD_CLIENT_SECRET      |    |   |
| AMAZON_ECOMMERCE_CLOUD_CLIENT_ID      |    |   |
| AMAZON_ECOMMERCE_CLOUD_CLIENT_SECRET      |    |   |
| AMAZON_ECOMMERCE_CLOUD_APPLICATION_ID      |    |   |
| MICROSOFTDYNAMICSSALES_CRM_CLOUD_CLIENT_ID      |    |   |
| MICROSOFTDYNAMICSSALES_CRM_CLOUD_CLIENT_SECRET      |    |   |
| SALESFORCE_CRM_CLOUD_CLIENT_ID      |    |   |
| SALESFORCE_CRM_CLOUD_CLIENT_SECRET      |    |   |

## RAG

### Embedding Models
Just use 1 model, it's not required of course to have them all.
| Variable | Example                           | Purpose                           |
| -------- | ------------------------------------- | ------------------------------------- |
| OPENAI_API_KEY      |    |   |
| JINA_API_KEY      |    |   |
| COHERE_API_KEY      |    |   |

| Variable | Example                           | Purpose                           |
| -------- | ------------------------------------- | ------------------------------------- |
| UNSTRUCTURED_API_KEY      |    |   |
| UNSTRUCTURED_API_URL      |    |   |

### Vector Database
Just use 1 Vector DB, it's not required of course to have them all.
| Variable | Example                           | Purpose                           |
| -------- | ------------------------------------- | ------------------------------------- |
| PINECONE_API_KEY      |    |   |
| PINECONE_INDEX_NAME      |    |   |
| QDRANT_BASE_URL      |    |   |
| QDRANT_API_KEY      |    |   |
| QDRANT_COLLECTION_NAME      |    |   |
| CHROMADB_URL      |    |   |
| CHROMADB_COLLECTION_NAME      |    |   |
| WEAVIATE_URL      |    |   |
| WEAVIATE_API_KEY      |    |   |
| WEAVIATE_CLASS_NAME      |    |   |
| TURBOPUFFER_API_KEY      |    |   |
| MILVUS_ADDRESS      |    |   |
| MILVUS_COLLECTION_NAME      |    |   |

# Frontend

## Configuration

| Variable | Example                           | Purpose                           |
| -------- | ------------------------------------- | ------------------------------------- |
| NEXT_PUBLIC_BACKEND_DOMAIN     |  http://localhost:3000 | Server url. Values are [http://localhost:3000, https://api-dev.panora.dev, https://api-sandbox.panora.dev, https://api.panora.dev] |
| NEXT_PUBLIC_MAGIC_LINK_DOMAIN      |  http://localhost:81   | Magic link server. Values are [http://localhost:81, https://connect-dev.panora.dev, https://connect.panora.dev ]  |
| NEXT_PUBLIC_DISTRIBUTION      | managed | Values are selfhost or managed |
| NEXT_PUBLIC_WEBAPP_DOMAIN      |  http://localhost  | Webapp client url. Values are [http://localhost, https://app-dev.panora.dev, https://app.panora.dev, ]  |
| NEXT_PUBLIC_POSTHOG_HOST      |    | Host domain of your posthog |
| NEXT_PUBLIC_POSTHOG_KEY      |    | Key of your posthog account |



## Storage (Optional)

If you selfhost, and you want the RAG feature you must fill these values.Just choose either AWS or Minio !
We already put variables for Minio, so you dont have to do anything. 
If you'd like to use AWS contact us for more info.
<Note>Minio bucket is available at http://localhost:9000 </Note>

| Variable | Example                           | Purpose                           |
| -------- | ------------------------------------- | ------------------------------------- |
| MINIO_ROOT_USER     | myaccesskey13 |  |
| MINIO_ROOT_PASSWORD      | mysecretkey12  |  |
| AWS_S3_REGION      |    |   |
| AWS_ACCESS_KEY_ID      |    |   |
| AWS_SECRET_ACCESS_KEY      |    |   |



